package com.second.client.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.second.client.dao.ClientLevelDao;
import com.second.client.pojo.entity.ClientLevel;
import com.second.client.pojo.vo.ChangeLevelStatusVo;
import com.second.client.pojo.vo.PageVo;
import com.second.client.service.ClientLevelService;
import com.second.client.util.PageData;
import com.second.common.pojo.R;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * (ClientLevel)表服务实现类
 *
 * @author makejava
 * @since 2021-07-23 14:52:27
 */
@Service("clientLevelService")
public class ClientLevelServiceImpl extends ServiceImpl<ClientLevelDao, ClientLevel> implements ClientLevelService {

    @Resource
    private ClientLevelDao clientLevelDao;

    /**
     * 查询所有会员等级信息
     * @param pageVo 分页工具类
     * @param levelId 等级Id
     * @return 所有数据
     */
    @Override
    public R getAllLevel(PageVo pageVo, Integer levelId) {
        // 获取mybatis-plus封装的分页工具类
        Page<ClientLevel> page = new Page<>(pageVo.getCurrentPage(),pageVo.getPageSize());
        QueryWrapper<ClientLevel> queryWrapper = new QueryWrapper<>();

        // 判断前端是否传递了模糊查询的规则
        if (levelId != null) {
            queryWrapper.eq("level_id",levelId);
        }

        // 返回数据
        return PageData.conditionalPage(clientLevelDao,page,queryWrapper);
    }

    /**
     * 根据等级Id，改变评论特权
     * @param changeLevelStatusVo 特权
     * @return 修改结果
     */
    @Override
    public R changePriviledgeComment(ChangeLevelStatusVo changeLevelStatusVo) {
        int update = clientLevelDao.changePriviledgeComment(changeLevelStatusVo);
        if (update > 0) {
            return R.success();
        }
        return R.error();
    }


    /**
     * 根据等级Id，改变活动特权
     * @param changeLevelStatusVo 特权
     * @return 修改结果
     */
    @Override
    public R changePriviledgePromotion(ChangeLevelStatusVo changeLevelStatusVo) {
        int update = clientLevelDao.changePriviledgePromotion(changeLevelStatusVo);
        if (update > 0) {
            return R.success();
        }
        return R.error();
    }

    /**
     * 根据等级Id，改变价格特权
     * @param changeLevelStatusVo 特权
     * @return 修改结果
     */
    @Override
    public R changePriviledgeMemberPricen(ChangeLevelStatusVo changeLevelStatusVo) {
        int update = clientLevelDao.changePriviledgeMemberPricen(changeLevelStatusVo);
        if (update > 0) {
            return R.success();
        }
        return R.error();
    }

    /**
     * 根据等级Id，改变生日特权
     * @param changeLevelStatusVo 特权
     * @return 修改结果
     */
    @Override
    public R changePriviledgeBirthday(ChangeLevelStatusVo changeLevelStatusVo) {
        int update = clientLevelDao.changePriviledgeBirthday(changeLevelStatusVo);
        if (update > 0) {
            return R.success();
        }
        return R.error();
    }

    /**
     * 根据id删除等级
     * @param levelId 等级Id
     * @return 删除结果
     */
    @Override
    public R deleteLevelById(Integer levelId) {
        boolean remove = this.removeById(levelId);
        if (remove == true) {
            return R.success();
        }
        return R.error();
    }

    /**
     * 修改/添加等级信息
     * @param clientLevel  等级信息
     * @return  修改结果
     */
    @Override
    public R updateLevel(ClientLevel clientLevel) {
        boolean b = false;
        // 修改等级信息
        if (clientLevel.getLevelId() != null) {
            b = this.updateById(clientLevel);
        } else {
            // 判断等级名是否重复
            QueryWrapper<ClientLevel> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("level_name",clientLevel.getLevelName());
            ClientLevel one = this.getOne(queryWrapper);
            if (one != null ) {
                return R.error().putObject("等级名重复");
            }else {
                // 添加等级信息
                b = this.save(clientLevel);
            }
        }

        if (b == true) {
            return R.success();
        }
        return R.error();
    }

    /**
     * 获取所有的等级，渲染到下拉菜单
     * @return 所有的等级数据
     */
    @Override
    public R getAll() {
        List<ClientLevel> list = this.list();
        if (list.size() > 0) {
            return R.success().putListData(list);
        }
        return R.error();
    }


}
